查看原文
其他

ggplot 绘制三角形相关性图

JunJunLab 老俊俊的生信笔记 2022-08-15


一个选择


学习一下怎么使用 ggplot 绘制三角形的相关性图.

1、制作三角形矩阵

要绘制三角形相关性图,我们首先得准备三角形矩阵,在 R 里有个很有用的函数:upper.trilower.tri 函数,下面介绍使用该函数进行三角形矩阵的操作:

# 加载内置数据集
data('mtcars')

# 计算相关性系数
corda <- data.frame(cor(mtcars))

# 查看内容
head(corda[1:3,1:5])
            mpg        cyl       disp         hp       drat
mpg   1.0000000 -0.8521620 -0.8475514 -0.7761684  0.6811719
cyl  -0.8521620  1.0000000  0.9020329  0.8324475 -0.6999381
disp -0.8475514  0.9020329  1.0000000  0.7909486 -0.7102139

可以看到这是一个对称矩阵,有大概一半的信息是重复的:

使用 upper.trilower.tri 函数对其中一半信息进行赋值操作:

# 上三角操作
corda[upper.tri(corda)] <- NA
# 计算相关性系数
corda <- data.frame(cor(mtcars))

# 下三角操作
corda[lower.tri(corda)] <- NA

2、绘图

有了三角形矩阵数据后,我们就可以进行绘图了,首先需要转换为长数据格式:

# 加载R包
library(reshape2)
library(tidyverse)

# 增加行名列
corda$y <- rownames(corda)

# 宽数据转长数据
da <- melt(data = corda) %>% na.omit()

# 因子化
da$variable <- factor(da$variable,levels = unique(da$variable))
da$y <- factor(da$y,levels = unique(da$y))

# 查看内容
head(da,3)
     y variable      value
1  mpg      mpg  1.0000000
2  cyl      mpg -0.8521620
3 disp      mpg -0.8475514

绘图:

# plot
p <- ggplot(da) +
  # 矩形图层
  geom_tile(aes(x = variable,y = y),fill = 'white',
            color = 'grey20',size = 1) +
  # 点图层
  geom_point(aes(x = variable,y = y,fill = value,size = value),
             shape = 21,color = 'black') +
  theme_minimal() +
  # 主题调整
  theme(panel.grid = element_blank(),
        axis.text = element_text(color = 'black',size = 20),
        axis.text.x = element_text(angle = 45,hjust = 0)) +
  # x轴标签位置
  scale_x_discrete(position = 'top') +
  # 点颜色
  scale_fill_gradientn(colors = colorRampPalette(c("#1E3163""#00C1D4""#FFED99","#FF7600"))(10)) +
  # 点大小范围
  scale_size(range = c(7,14)) +
  # 图例设置
  guides(size = 'none',fill = guide_colorbar(title = 'Corr',
                                             barwidth = 1.5,barheight = 15,
                                             frame.colour = 'black',
                                             ticks.colour = "black")) +
  xlab('') + ylab('')

p

旋转一下,换个方向:

# 旋转一下
p + coord_flip() +
  theme(axis.text.x = element_text(angle = 45,hjust = 1))

换个形状:

ggplot(da) +
  # 矩形图层
  geom_tile(aes(x = variable,y = y),fill = 'white',
            color = 'grey20',size = 1) +
  # 点图层
  geom_point(aes(x = variable,y = y,color = value,size = value),
             shape = 'O') +
  theme_minimal() +
  # 主题调整
  theme(panel.grid = element_blank(),
        axis.text = element_text(color = 'black',size = 20),
        axis.text.x = element_text(angle = 45,hjust = 0)) +
  # x轴标签位置
  scale_x_discrete(position = 'top') +
  # 点颜色
  scale_color_gradientn(colors = colorRampPalette(c("#1E3163""#00C1D4""#FFED99","#FF7600"))(10)) +
  # 点大小范围
  scale_size(range = c(7,14)) +
  # 图例设置
  guides(size = 'none',color = guide_colorbar(title = 'Corr',
                                             barwidth = 1.5,barheight = 15,
                                             frame.colour = 'black',
                                             ticks.colour = "black")) +
  xlab('') + ylab('')

方形:

# squre
ggplot(da) +
  # 矩形图层
  geom_tile(aes(x = variable,y = y),fill = 'white',
            color = 'grey20',size = 1) +
  # 点图层
  geom_point(aes(x = variable,y = y,fill = value,size = value),
             shape = 22,color = 'black') +
  theme_minimal() +
  # 主题调整
  theme(panel.grid = element_blank(),
        axis.text = element_text(color = 'black',size = 20),
        axis.text.x = element_text(angle = 45,hjust = 0)) +
  # x轴标签位置
  scale_x_discrete(position = 'top') +
  # 点颜色
  scale_fill_gradientn(colors = colorRampPalette(c("blue""white""red"))(10)) +
  # 点大小范围
  scale_size(range = c(7,14)) +
  # 图例设置
  guides(size = 'none',fill = guide_colorbar(title = 'Corr',
                                             barwidth = 1.5,barheight = 15,
                                             frame.colour = 'black',
                                             ticks.colour = "black")) +
  xlab('') + ylab('')

3、道阻且长

你仍是少年!



欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦。

群二维码:



老俊俊微信:




知识星球:



所以今天你学习了吗?

欢迎小伙伴留言评论!

今天的分享就到这里了,敬请期待下一篇!

最后欢迎大家分享转发,您的点赞是对我的鼓励肯定

如果觉得对您帮助很大,赏杯快乐水喝喝吧!




 往期回顾 




clusterProfiler 的 shiny 版

我的 Ubuntu 启动项不见了?

Ribo-seq 质控软件:ribosomeProfilingQC

barplot 还不会添加误差线?你点进来就会了!

跟着 Hindawi 学画图:漂亮的火山图

跟着 Microbiome 学画图:堆积柱形图的多层注释

跟着 Science 学画图:多层柱形图

CIRCexplorer3 使用介绍

芯片数据分析神器:GEO2R

CIRCexplorer3: 对 circRNA 进行相对定量

◀...

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存